package accesoDatos;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import entidades.*;

public class adEspecialidades extends adDatos{
	public void agregarEspecialidad(Especialidad espActual)
    {
        Connection oCnn = crearConexion();

        StringBuilder sb = new StringBuilder();
        sb.append(" INSERT INTO especialidades( ");
        sb.append("     desc_especialidad ");
        sb.append(" ) ");
        sb.append(" VALUES ( '");
        sb.append(      espActual.getDescripcion()+"'");
        sb.append(" ); ");
        
		try {
			Statement cmdInsertarEspecialidad = oCnn.createStatement();
			cmdInsertarEspecialidad.executeUpdate(sb.toString());
			oCnn.close();
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("ERROR: No se pudo agregar la especialidad.");
		}
    }
	
	public void borrarEspecialidad(int id_especialidad)
    {
        Connection oCnn = crearConexion();
        
        StringBuilder sb = new StringBuilder();

        sb.append(" DELETE FROM especialidades ");
        sb.append(" WHERE id_especialidad = "+id_especialidad+"; ");

        try{
        	Statement cmdBorrarEspecialidad = oCnn.createStatement();
        	cmdBorrarEspecialidad.executeUpdate(sb.toString());
        	oCnn.close();
        } catch (SQLException e) {
			e.printStackTrace();
			System.out.println("ERROR: No se pudo borrar la Especialidad.");
		}
    }
	
	public void modificarEspecialidad(Especialidad espActual)
	{
        Connection oCnn = crearConexion();

        StringBuilder sb = new StringBuilder();
        sb.append(" UPDATE especialidades ");
        sb.append(" SET  ");
        sb.append("     desc_especialidad = '"+espActual.getDescripcion()+"' ");
        sb.append(" WHERE id_especialidad = "+espActual.getId()+" ");

        try{
        	Statement cmdModificarEspecialidad = oCnn.createStatement();
        	cmdModificarEspecialidad.executeUpdate(sb.toString());
        	oCnn.close();
        } catch (SQLException e) {
			e.printStackTrace();
			System.out.println("ERROR: No se pudo modificar la Especialidad.");
		}
    }
	
	public Especialidad getEspecialidad(int id_especialidad)
	{
        Especialidad espActual = new Especialidad();
        Connection oCnn = crearConexion();

        StringBuilder sb = new StringBuilder();
        sb.append(" SELECT ");
        sb.append(" * ");
        sb.append(" FROM especialidades ");
        sb.append(" WHERE id_especialidad = "+id_especialidad+" ");

        try{
        	Statement cmdGetEspecialidad = oCnn.createStatement();
        	ResultSet rsEspecialidades = cmdGetEspecialidad.executeQuery(sb.toString());
        	if (rsEspecialidades.next() == true){
        		rsEspecialidades.beforeFirst();
    	        
    	        while (rsEspecialidades.next()){
    	        	espActual.setId(rsEspecialidades.getInt("id_especialidad"));
    	        	espActual.setDescripcion(rsEspecialidades.getString("desc_especialidad"));
    	        }
    	    }
        	oCnn.close();
        } catch (SQLException e) {
			e.printStackTrace();
			System.out.println("ERROR: No se pudo obtener la Especialidad.");
		}
        return espActual;
    }
	
	public ArrayList<Especialidad> recuperarTodos()
	{
        Connection oCnn = crearConexion();
        ArrayList<Especialidad> listaEspecialidades = new ArrayList<Especialidad>();
        Especialidad espActual;

        String sql = "SELECT * FROM especialidades";

        try{
        	Statement cmdRecuperarEspecialidades = oCnn.createStatement();
        	ResultSet rsEspecialidades = cmdRecuperarEspecialidades.executeQuery(sql);
        	if (rsEspecialidades.next()==true){
        		rsEspecialidades.beforeFirst();
    	        
    	        while (rsEspecialidades.next()){
    	        	espActual = new Especialidad();
    	        	espActual.setId(rsEspecialidades.getInt("id_especialidad"));
    	        	espActual.setDescripcion(rsEspecialidades.getString("desc_especialidad"));

    	            listaEspecialidades.add(espActual);
    	        }
    	    }
        	oCnn.close();
        } catch (SQLException e) {
			e.printStackTrace();
			System.out.println("ERROR: No se pudo obtener las Especialidades.");
		}
        return listaEspecialidades;
    }
	
	public boolean estaAsociadaAPlan(int idEspecialidad)
    {
        Connection oCnn = crearConexion();
        
        String sql = "SELECT * FROM planes WHERE id_especialidad = "+idEspecialidad+"";
        
        try {
        	Statement cmdAsociada = oCnn.createStatement();
        	ResultSet rsEspecialidades = cmdAsociada.executeQuery(sql);
        	if(rsEspecialidades.next()){
        		oCnn.close();
        		return true;
        	}		
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("ERROR: No se pudo determinar si la Especialidad esta asociada a un Plan.");
		}
        return false;
    }

}
